#ifndef __DAISY_VIEW_OGRE_GRAPHICS_MANAGER_H__
#define __DAISY_VIEW_OGRE_GRAPHICS_MANAGER_H__
#include "ViewOgreConfig.h"
#include <daisy\Singleton.h>
#include <daisy\SystemInterface.h>
namespace DAISY{


class OgreGraphicsManagerImpl;
template class _DaisyViewOgreExport boost::scoped_ptr<OgreGraphicsManagerImpl>;

class _DaisyViewOgreExport OgreGraphicsManager : public Tools::Singleton<OgreGraphicsManager>
{

public:
	OgreGraphicsManager(void);
	~OgreGraphicsManager(void);
	bool update(TimeType interval);
	bool init(void);
	void shutdown(void);
	Ogre::Camera * getCamera(void);
	Ogre::SceneManager * getSceneManager(void);
	Ogre::RenderWindow * getRenderWindow(void);
	Ogre::SceneManager * getSceneManager(const std::string & name);
	Ogre::Root* getRoot();//for caelum
	void addSceneManager(const std::string & name,const std::string & type = "ST_GENERIC");
private:
	
	boost::scoped_ptr<OgreGraphicsManagerImpl> _impl;
};



SYSTEMUNIT_BEGIN(OgreGraphicsManager) 
SYSTEMUNIT_INIT 
SYSTEMUNIT_UPDATE 
SYSTEMUNIT_SHUTDOWN 
SYSTEMUNIT_END(OgreGraphicsManager) 

}



//\
// \
//SYSTEMUNIT_FACTORY(Interface, OgreGraphicsManager) 

#endif